package Leetcode.链表;


/**
 * 链表中节点数目在范围 [0, 300] 内
 * -100 <= Node.val <= 100
 * 题目数据保证链表已经按升序 排列
 */
public class 删除排序链表中的重复元素2 {
    /**
     * 1.排序   可以弄一个map看是否链表的值已经存在过，然后i->j遍历删除链表
     *      因为排序好了，所以可以定义一个指针指向当前未删除的最大的一个节点
     *      然后有重复的值的时候，新启一个指针遍历，一直到不重复为止，然后将之前的指针指向当前的位置，继续遍历
     * @param head
     * @return
     */
    public ListNode deleteDuplicates(ListNode head) {
        if (head == null) {
            return head;
        }

        ListNode dummy = new ListNode(0, head);

        ListNode cur = dummy;
        while (cur.next != null && cur.next.next != null) {
            if (cur.next.val == cur.next.next.val) {
                int x = cur.next.val;
                while (cur.next != null && cur.next.val == x) {
                    cur.next = cur.next.next;
                }
            } else {
                cur = cur.next;
            }
        }

        return dummy.next;
    }
}
